'use strict'

//! 切换工作目录
process.chdir(__dirname)

const titbit=require('titbit');
const fs=require('fs');
//! 引入数据库 
const dbcfg=require('./dbconfig.js');
const pg=require('pg');

const wxkey=require('./wxkey.js');
const {httpcli}=require('gohttp');//!封装了http模块的一个库

const token=require('titbit-token');

const tbloader=require('titbit-loader');


//todo 通过try catch保证images文件夹存在 
try{
    //! 是否存在images目录 
    fs.accessSync('./images');
}catch(err){
    //! 没有的话创建目录 
    fs.mkdirSync('./images');
}
//! Pool方法连接池，连接数据库 
let psql=new pg.Pool(dbcfg);


//todo 添加域名证书 
let cert_path='/usr/local/share';
const app=new titbit({
    // 开启调试模式，若有错误会出现错误信息
    debug:true,

    globalLog:true,//!开启全局日志

    cert:`${cert_path}/api.hiehie.top.pem`,
    key:`${cert_path}/api.hiehie.top.key`
})

let tb=new tbloader();
tb.init(app);
            //* 名字   实例
app.addService('psql',psql);
app.addService('imagePath',`${__dirname}/images`)

/** ------------content路由----------------- */

/** ------------content路由——END--------------- */
//? 读取html页面 
app.get('/upload',async c=>{
    //! c.reply 是响应对象，可写的流
    //! c.reply 在http/1.1协议里面指向response
    //! c.reply 在http/2协议里面指向http2 stream
    await c.helper.pipe('./upload.html',c.reply);
})


let tok=new token({
    // token有效期，单位为秒，45秒超时
    expires:45,
    //必须是32位字符  key是加密的值，加密的密钥，面向开发者的密码
    key:'123a56789123f56789w234r678912345',
    // 必须16位字符 用作初始干扰的数据
    iv:'1g345r7812g45678'
})

app.addService('tok',tok);

app.get('/mp-login/:code',async c=>{
    // c.send(c.param);
    let auth_url=`https://api.weixin.qq.com/sns/jscode2session`+
                `?appid=${wxkey.appid}`+
                `&secret=${wxkey.secret}`+
                `&js_code=${c.param.code}`+
                `&grant_type=authorization_code`
    //! 对微信服务器发起一个get请求，请求成功之后，返回openid（用户唯一标识）
    //!开放密码 session_key，unionid，errcode，errmsg等 
    let ret=await httpcli.get(auth_url)
                        .then(res=>{
                            return res.json() // blob() json() text()格式都可以
                        })
    // c.send(ret)
    c.send(tok.make(ret))//tok.make进行加密
})

// 验证的路由
// app.get('/decrypt/:token',async c=>{
//     c.send(tok.verify(c.param.token));
// })

// 运行在1234端口
app.run(2345);